﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenSource.UPnP;
using System.Windows;
using System.Windows.Controls;
using System.Reflection;

namespace ApplicationCliente1
{
    class ServeurApplicationCliente1
    {
        private UPnPDevice root;
        private UPnPService list;
        String[] tabresultat = new String[3];
        
        static int ctr = 0;
       
      
        /**
         * \ServeurApplicationCliente1            Constructeur de la classe 'ServeurApplicationCliente1'
         
        */
        public ServeurApplicationCliente1()
        {
            
            root = UPnPDevice.CreateRootDevice(360, 1.0, "");
            root.FriendlyName = "ServeurClientUPnP1";
            root.DeviceURN = "urn:schemas-upnp-org:device:ServeurClientUPnP1:1";
            root.HasPresentation = false;
            root.Manufacturer = "sbai";
            root.ModelName = "UPnP sample for kids";
            root.UniqueDeviceName = "12345678-153f-430d-82f3-dff320c17503";

            list = new UPnPService(1.0, "SampleClient", "urn:schemas-upnp-org:service:SampleClient:1", true, this);

           
            list.AddMethod("getresultat2");
            list.AddMethod("AppelMethode2");
            root.AddService(list);
            root.Advertise();
        }


        /**
        * \startUPnP       pour démarrer le device
        */
        public void startUPnP()
        {
            root.StartDevice();
            Console.WriteLine("ServeurClientUPnP start");
        }



        /**
       * \stopUPnP       pour arrêter le device

       */
        public void stopUPnP()
        {
            root.StopDevice();
        }


        /**
       * \getresultat2      une méthode intermédiaire pour invoquer la méthode que le serveur veut appeler et je récupère le resultat.
       * \param    meth    le nom de la méthode que le serveur veut appeler.
       */

        public string getresultat2(string meth)
        {


            Console.WriteLine("méthode getresultat2 est appelée : " + meth);

            //pour lister les méthodes d'une classe
            Console.WriteLine("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");

            string[] chh = AppelMethode2(meth);

            Console.WriteLine("Resultat final esttttt   :::::::   " + chh.Count());

            Console.WriteLine("chh est de valeur");
            for (int w = 0; w < chh.Count(); w++)
            {
                Console.WriteLine(chh[w]);
            }
            string result = "";

            for (int i = 0; i < chh.Count(); i++)
            {
                result = result + "," + chh[i];
            }

            Console.WriteLine(result);

            return result;
        }

        /**
       * \AppelMethode2        Dans cette méthode j'ai utilisé la réflexion pour appeler dynamiquement des méthodes côté client.
       * \param    strParam   le nom de la méthode que le serveur veut appeler.
       */

        public string[] AppelMethode2(string strParam)
        {

            Console.WriteLine("strParam est de valeur:  " + strParam);
            // On récupère le Type de la classe elle-même
            Type oType = this.GetType();

            // On va récupérer la liste des méthodes qui existent dans la classe 'TestReflection'
            MethodInfo[] ListMethods = oType.GetMethods();
            string[] objVal = new string[3];
            // Donc pour chaque méthode :
            foreach (MethodInfo mi in ListMethods)
            {
                // Si le nom de la méthode est égale à "Appel_" + strPAram
                Console.WriteLine("mi est: " + mi.Name);
                if (mi.Name.Equals(strParam))
                {

                    Console.WriteLine("il ya cette méthode : " + strParam);
                    // Alors on 'exécute' cette méthode que l'on a trouvée
                    // On sait qu'elle retourne "quelqu'chose". Donc on récupère ce quelque chose
                    objVal = (string[])mi.Invoke(this, null);
                    // On sort de la boucle foreach
                    break;
                }
            }
            // Si on a rien trouvé, parce que objVal est resté null
            // Tu fais ce que tu veux. Moi j'exceptionne.
            //if (objVal == null)
            //  throw new Exception("Erreur dans l'invocation des méthodes dynamiquement...");
            // Sinon, je retourne la valeur string du résultat
            return objVal;
        }
        


        /**
       * \btnNext_Click1       la méthode liée au click sur le button1.
        */
        public string[] btnNext_Click1() {

           
            Console.WriteLine("un click sur le button btnNext");

            ctr++;

            if (ctr == 1)
            {

                tabresultat = resultats("image1", "UriSource", "http://www.linternaute.com/nature-animaux/magazine/photo/les-100-paysages-de-france/image/etretat-262711.jpg");

            }
            else if (ctr == 2)
            {

                tabresultat = resultats("image1", "UriSource", "http://tigresse888.t.i.pic.centerblog.net/o/74184583.jpg");

            }
            else if (ctr == 3)
            {

                tabresultat = resultats("image1", "UriSource", "http://www.midilibrevoyages.com/imgfr/europe/autriche-tyrol-2.jpg");

            }
            else if (ctr == 4)
            {

                tabresultat = resultats("image1", "UriSource", "http://www.interalpen.com/image/medium/fr/sejour-motivation-hiver-autriche.jpg");
              
            }
            else if (ctr == 5)
            {

                tabresultat = resultats("image1", "UriSource", "http://www.consigliando.it/wp-content/uploads/2011/01/amsterdam.jpg");
              
            }
            else if (ctr == 6)
            {

                tabresultat = resultats("image1", "UriSource", "http://img0.svstatic.com/wallpapers/8c73c2932f94f48f44bc8fa8fb47c9aa_large.jpeg");
               
            }
            else if (ctr == 7)
            {

                tabresultat = resultats("image1", "UriSource", "http://faistoilabelle.files.wordpress.com/2011/04/venise_940x705.jpg");
               
            }

            else if (ctr == 8)
            {

                tabresultat = resultats("image1", "UriSource", "http://photos.hotelsclick.com/TN/HAMM/46780/5.jpg");
               
            }
            else if (ctr == 9)
            {

                tabresultat = resultats("image1", "UriSource", "http://blog.govoyages.com/wp-content/uploads/grece-crete.jpg");
               
            }
            else if (ctr == 10)
            {

                tabresultat = resultats("image1", "UriSource", "http://img.1.vacanceo.net/classic/207520.jpg");
             
            }

            else if (ctr > 10)
            {            
                ctr = 0;
                btnNext_Click1();
            }

            return tabresultat;
        }

        /**
              * \resultats       méthode intermédiaire pour les deux méthodes :btnNext_Click1 et btnFirst_Click1().
        */
        public string[] resultats(string param1, string param2,string param3) {
            tabresultat[0] = param1;
            tabresultat[1] = param2;
            tabresultat[2] = param3;

            return tabresultat;
        }


        /**
       * \btnFirst_Click1()      la méthode liée au click sur le button11.
        */
        /**
        * \btnFirst_Click      la méthode liée au click sur le btnFirst_Click1.
        */
        public string[] btnFirst_Click1()
        {

           Console.WriteLine("un click sur le button btnFirst");
            ctr--;

            if (ctr == 1)
            {

                tabresultat = resultats("image1", "UriSource", "http://www.linternaute.com/nature-animaux/magazine/photo/les-100-paysages-de-france/image/etretat-262711.jpg");
                

            }
            else if (ctr == 2)
            {

                tabresultat = resultats("image1", "UriSource", "http://tigresse888.t.i.pic.centerblog.net/o/74184583.jpg");
               

            }
            else if (ctr == 3)
            {

                tabresultat = resultats("image1", "UriSource", "http://www.midilibrevoyages.com/imgfr/europe/autriche-tyrol-2.jpg");
               

            }
            else if (ctr == 4)
            {

                tabresultat = resultats("image1", "UriSource", "http://www.interalpen.com/image/medium/fr/sejour-motivation-hiver-autriche.jpg");
               
            }
            else if (ctr == 5)
            {

                tabresultat = resultats("image1", "UriSource", "http://www.consigliando.it/wp-content/uploads/2011/01/amsterdam.jpg");
               
            }
            else if (ctr == 6)
            {

                tabresultat = resultats("image1", "UriSource", "http://img0.svstatic.com/wallpapers/8c73c2932f94f48f44bc8fa8fb47c9aa_large.jpeg");
               
            }
            else if (ctr == 7)
            {

                tabresultat = resultats("image1", "UriSource", "http://faistoilabelle.files.wordpress.com/2011/04/venise_940x705.jpg");
        
            }

            else if (ctr == 8)
            {

                tabresultat = resultats("image1", "UriSource", "http://photos.hotelsclick.com/TN/HAMM/46780/5.jpg");
               
            }
            else if (ctr == 9)
            {

                tabresultat = resultats("image1", "UriSource", "http://blog.govoyages.com/wp-content/uploads/grece-crete.jpg");
               
            }
            else if (ctr == 10)
            {

                tabresultat = resultats("image1", "UriSource", "http://img.1.vacanceo.net/classic/207520.jpg");
              
            }

          else if (ctr < 1)
            {

                ctr = 11;
               
                btnFirst_Click1();
            }

            return tabresultat;
        }

      
    }
}
